package com.gxar.quick.ar.server.db.mapper;

import com.gxar.quick.ar.server.base.model.user.vo.response.UserExchangeItemListResponse;
import com.gxar.quick.ar.server.base.model.works.dto.WorksListDTO;
import com.gxar.quick.ar.server.db.model.ExchangeItemUserEntity;

import java.util.List;

/**
 * @author linsy
 * @version 1.0
 * @created 2024/2/18 10:31
 */
public interface ExchangeItemUserMapper {

    /**
     * 删除
     *
     * @param code  code
     * @param phone 手机号
     */
    void delete(String code, String phone);

    /**
     * 查询手机号未兑换兑换品
     *
     * @param code      兑换品code
     * @param userId    用户ID
     * @param exchanged 是否兑换
     * @return 响应
     */
    List<ExchangeItemUserEntity> queryUserExchanged(String code, Long userId, boolean exchanged);

    /**
     * 分页查询用户兑换品
     *
     * @param userId 用户ID
     * @return 响应
     */
    List<ExchangeItemUserEntity> queryPage(Long userId);

    /**
     * 查询转赠未接收的兑换品
     *
     * @param phone 手机号
     * @return 响应
     */
    List<ExchangeItemUserEntity> queryExchangeUnReceive(String phone);

    /**
     * 查询用户已经选择的兑换品
     *
     * @param phone 手机号
     * @return 响应
     */
    List<UserExchangeItemListResponse> selectedExchangeItem(String phone);

    /**
     * 根据手机号查询用户兑换品
     *
     * @param userId 用户ID
     * @return 兑换品
     */
    List<ExchangeItemUserEntity> queryByUserId(Long userId);

    /**
     * 查询用户兑换品默认作品信息
     *
     * @param userId 用户ID
     * @return 兑换品默认作品信息
     */
    List<WorksListDTO> queryWorks(Long userId);

    /**
     * 查询所有未兑换的用户兑换品
     *
     * @return 未兑换的用户兑换品
     */
    List<ExchangeItemUserEntity> queryUnExchangeUserAll();

    /**
     * 批量保存数据
     *
     * @param saveList 数据集合
     * @return 保存条数
     */
    Integer saveAll(List<ExchangeItemUserEntity> saveList);

    /**
     * 查询用户已经选择的兑换品列表
     *
     * @param userId 用户ID
     * @return 兑换品列表
     */
    List<UserExchangeItemListResponse> selectedExchangeItemList(Long userId);

    /**
     * 查询同步识别图的兑换品
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @param userId    用户ID
     * @return 响应
     */
    List<ExchangeItemUserEntity> querySyncCloudIdentify(String startTime, String endTime, Long userId);

    /**
     * 查询用户可兑换的兑换品
     *
     * @param itemCode  兑换品码
     * @param userId    用户ID
     * @param exchanged 是否兑换
     * @param method    兑换方式
     * @return 响应
     */
    List<ExchangeItemUserEntity> queryUserExchangedAndMethod(String itemCode, Long userId, boolean exchanged, Integer method);

}
